home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI / LEZIONE2l.s < prev    next >
Text File  |  1994-10-30  |  5KB  |  113 lines

  1.  
  2. ; Lezione2l.s
  3.  
  4. Inizio:
  5.     lea    $dff000,a0    ; metti $dff000 in a0
  6. Waitmouse:
  7.     move.w    #$20,$1dc(a0)    ; BEAMCON0 (ECS+) Risoluzione video PAL
  8.     bsr.s    Lampeggio    ; Fa lampeggiare lo schermo
  9.     bsr.s    ColorFreccia    ; Fa lampeggiare la freccia
  10.     btst    #2,$16(a0)    ; POTINP - Tasto destro del mouse premuto?
  11.                 ; (bit 2 del $dff016
  12.     bne.s    nonpremuto    ; Se non e' premuto, salta FaiConfusione
  13.     bsr.s    FaiConfusione    ; 
  14. nonpremuto:
  15.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  16.     bne.s    Waitmouse    ; se no ritorna a waitmouse e ripeti tutto
  17.     rts            ; esci
  18.  
  19. ColorFreccia:
  20.     moveq    #-1,d1        ; OSSIA moveq #$FFFFFFFF,d1
  21.     moveq    #20-1,d0    ; numero di cicli colorfreccia
  22. flash:
  23.     subq.w    #8,d1        ; cambia il colore da mettere in $dff1a4
  24.     move.w    d1,$1a4(a0)    ; COLOR18 - metti il valore di d1 in $dff1a4
  25.                 ; (il colore della freccia del mouse!)
  26.     dbra    d0,flash
  27.     rts
  28.  
  29. Lampeggio:
  30.     move.w    6(a0),$180(a0)    ; metti il valore .w di $dff006 nel color 0
  31.     move.b    6(a0),$182(a0)    ; metti il valore .b di $dff006 nel color 1
  32.     rts
  33.  
  34. FaiConfusione:
  35.     move.w    #0,$1dc(a0)    ; BEAMCON0 (ECS+) Risuluzione video NTSC
  36.     rts
  37.  
  38.     END
  39.  
  40. Questo programmino e' interessante solo per la sua struttura, infatti
  41. ha un programma principale, quello da Inizio all'RTS, il quale richiama
  42. delle subroutine (ovvero sottoprogrammi, che non sono altro che parti del
  43. programma denominati da una label (cioe' da un nome) e terminanti in un RTS.
  44. Con il debugger "AD" provate a seguire il corso del programma: per seguire
  45. tutte le subroutine andate avanti con il tasto con la freccia verso destra,
  46. e noterete tra l'altro nella routine ColorFreccia come il registro d0
  47. sia decrementato di 1 in 1.
  48.  
  49. Il problema fondamentale delle strutture BSR/BEQ/BNE/RTS sta nel fatto che
  50. tutto e' regolato da salti che possono determinare un ritorno tramite RTS al
  51. punto dove e' stato eseguito tale salto (BSR LABEL), e da salti che invece
  52. sono come i rami di un albero: una volta scelto se prendere la diramazione
  53. destra o sinistra si continua per quella e non si puo' piu' tornare indietro
  54.  
  55.             ramo 1
  56.            _______ _ _ eccetera _ _ _ RTS, uscita da questa parte
  57.     bivio beq/bne /
  58.     _____________/
  59.          \ ramo 2
  60.           \______ _ _ eccetera _ _ _ RTS, uscita da questa altra parte
  61.  
  62.  
  63. Un salto BEQ/BNE e' come decidere di andare a Milano o a Palermo, si passa da
  64. altre strade, e una volta arrivati alla destinazione si passa la notte in una
  65. di quelle due citta' (dove troviamo l'RTS), avendo percorso diverse autostrade.
  66.  
  67. Invece se troviamo un BSR.w Milano, saltiamo a Milano, eseguiamo le istruzioni
  68. che troviamo a Milano, poi quando troviamo un RTS ci "teletrasportiamo" al
  69. punto dove avevamo imboccato la strada per Milano, miracolosamente, e' come
  70. se leggessimo un libro magico, in cui in ogni pagina c'e' la figura di un
  71. paesaggio, dunque con un AbraCadaBSR entriamo nel disegno della prima pagina,
  72. ci passiamo un po' di tempo, poi imbattendoci in un AmuletRTS torniamo seduti
  73. davanti al libro, pronti ad un AbraCadaBSR nella seconda pagina.
  74.  
  75.  
  76. NOTA1: Premendo il tasto destro viene eseguita una routine che altrimenti
  77. viene saltata:
  78.  
  79.     btst    #2,$16(a0)    ; Tasto destro del mouse premuto?
  80.                 ; (bit 2 del $dff016 - POTINP)
  81.     bne.s    nonpremuto    ; Se non e' premuto, salta FaiConfusione
  82.     bsr.s    FaiConfusione    ; 
  83. nonpremuto:
  84.  
  85. ricordatevi bene questo metodo per eseguire una subroutine solo a patto
  86. che una certa condizione sia soddisfatta, in questo caso che il tasto
  87. destro del mouse sia premuto; programmando si fanno spesso di queste cose.
  88. Il registro usato per fare "Confusione" e' il $dff1dc, il cui bit 5 serve
  89. per scambiare la modalita' video tra PAL europea o NTSC americana; questo
  90. registro esiste solo nei computer fabbricati dopo il 1989, a qualcuno che
  91. ha un'Amiga vecchio potrebbe non funzionare. Se vi funziona noterete che
  92. premendo il tasto destro lo schermo oltre a lampeggiare sembrera' che
  93. esploda, infatti scambiando molto velocemente modalita' questo e' il
  94. risultato. Se volete fare 2 programmini richiamabili da AmigaDos che scambino
  95. il modo video, basta che facciate:
  96.  
  97.     move.w    #0,$dff1dc    ; BEAMCON0
  98.     rts
  99.  
  100. assemblatelo, e salvatelo su un disco con WO (cioe' come file che potete
  101. eseguire) con il nome NTSC, poi assemblate quest'altro:
  102.  
  103.     move.w    #$20,$dff1dc    ; BEAMCON0
  104.     rts
  105.  
  106. E salvatelo come PAL. Da SHELL potrete cosi' cambiare modo video
  107. chiamando i 2 programmini PAL e NTSC.
  108.  
  109. Se non vi orientate in questo programma considerate che quelli VERI sono
  110. mille volte piu' complicati come BSR vari, quindi vedete di capirlo al 100%
  111. prima di cominciare la LEZIONE3, intitolata: "POTEVAMO STUPIRVI CON EFFETTI
  112. SPECIALI E COLORI ULTRAVIVACI, MA NON SAPPIAMO ANCORA FARE".
  113.